{"version":3,"file":"static/chunks/pages/locations/[...slug]-c85248da9bc689fc.js","mappings":"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","sources":["webpack://_N_E/?55c1","webpack://_N_E/../../libs/osc/breadcrumbs/src/lib/breadcrumbs.tsx","webpack://_N_E/../../libs/osc/breadcrumbs/src/index.ts","webpack://_N_E/./components/breadcrumbs/breadcrumbs.tsx","webpack://_N_E/./components/breadcrumbs/index.ts","webpack://_N_E/./components/about-locations/about-locations-page.tsx","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_trimmedEndIndex.js","webpack://_N_E/./utils/seo-schema-utils.ts","webpack://_N_E/./components/interlinks/interlinks.tsx","webpack://_N_E/./components/interlinks/index.ts","webpack://_N_E/./hooks/use-get-dream-page-attributes.ts","webpack://_N_E/./hooks/use-hotel-sort.ts","webpack://_N_E/./components/locations-page/locations-page.tsx","webpack://_N_E/./components/locations-page/index.ts","webpack://_N_E/./pages/locations/[...slug]/index.tsx","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toNumber.js","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTrim.js","webpack://_N_E/./components/about-locations/about-locations-page.module.css","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/now.js","webpack://_N_E/../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/debounce.js"],"sourcesContent":["\n    (window.__NEXT_P = window.__NEXT_P || []).push([\n      \"/locations/[...slug]\",\n      function () {\n        return require(\"private-next-pages/locations/[...slug]/index.tsx\");\n      }\n    ]);\n    if(module.hot) {\n      module.hot.dispose(function () {\n        window.__NEXT_P.push([\"/locations/[...slug]\"])\n      });\n    }\n  ","import { useTranslation } from 'next-i18next';\n\nexport type BreadcrumbsProps = {\n  /** A list of breadcrumbs to display */\n  breadcrumbs?: { name?: string | null; uri?: string | null }[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport const Breadcrumbs = ({ breadcrumbs, ...rest }: BreadcrumbsProps) => {\n  const { t } = useTranslation('osc-breadcrumbs');\n\n  if (!breadcrumbs?.length) return null;\n\n  return (\n    <nav aria-label={t('breadcrumb')} data-testid=\"osc-breadcrumbs\" {...rest}>\n      <ol className=\"flex flex-wrap text-xs text-text-alt md:text-sm\">\n        {breadcrumbs.map((breadcrumb, idx) => {\n          const isLastBreadcrumb = idx === breadcrumbs.length - 1;\n          return (\n            <li key={breadcrumb.uri}>\n              {isLastBreadcrumb ? (\n                <a aria-current=\"page\" href={breadcrumb.uri || ''}>\n                  {breadcrumb.name}\n                </a>\n              ) : (\n                <>\n                  <a className=\"underline\" href={breadcrumb.uri || ''}>\n                    {breadcrumb.name}\n                  </a>\n                  <span aria-hidden={true} className=\"mx-2\">\n                    /\n                  </span>\n                </>\n              )}\n            </li>\n          );\n        })}\n      </ol>\n    </nav>\n  );\n};\n\nexport default Breadcrumbs;\n","export * from './lib/breadcrumbs';\n","import { useWrappedRouter } from '../../hooks';\nimport { Breadcrumbs as OSCBreadCrumbs } from '@dx-ui/osc-breadcrumbs';\n\ntype BreadcrumbsProps = {\n  breadcrumbs: { name: string; uri: string }[];\n};\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n  const { router } = useWrappedRouter();\n\n  if (breadcrumbs.length === 0) return null;\n\n  const breadCrumbs = breadcrumbs?.map((bc) => ({\n    name: bc.name,\n    uri: `/${router.locale}${bc.uri}`,\n  }));\n  return <OSCBreadCrumbs breadcrumbs={breadCrumbs} />;\n};\n","export * from './breadcrumbs';\n","import styles from './about-locations-page.module.css';\nimport type { LocationAbout } from '@dx-ui/queries-dx-shop-search-ui';\nimport cx from 'classnames';\n\ntype AboutLocationsPageProp = {\n  about?: LocationAbout | null;\n  aboutClassName?: string;\n  contentBlockClassName?: string;\n  descriptionClassName?: string;\n  titleClassName?: string;\n};\n\nexport const AboutLocationsPage = ({\n  about,\n  aboutClassName,\n  contentBlockClassName,\n  descriptionClassName,\n  titleClassName,\n}: AboutLocationsPageProp) => {\n  let descIndex = 0;\n  let orderedListIndex = 0;\n  let unOrderedListIndex = 0;\n  if (about && about?.contentBlocks?.length > 0) {\n    return (\n      <div className={cx(styles.container, aboutClassName)} data-testid=\"about-contentBlocks\">\n        {about?.contentBlocks?.map((contentBlock) => {\n          const title = contentBlock?.title ? `<h2>${contentBlock?.title}</h2>` : null;\n          return title ? (\n            <div key={`content-block-${contentBlock?.title}`} className={contentBlockClassName}>\n              <div\n                className={cx(\n                  {\n                    'text-primary text-base font-bold': !titleClassName,\n                  },\n                  titleClassName\n                )}\n                dangerouslySetInnerHTML={{ __html: title }}\n              />\n              {contentBlock.descriptions?.map((description) => {\n                return description ? (\n                  <div\n                    className={cx(\n                      {\n                        'p-2 text-xs': !descriptionClassName,\n                      },\n                      descriptionClassName\n                    )}\n                    dangerouslySetInnerHTML={{ __html: description }}\n                    key={`content-title-${descIndex++}`}\n                  />\n                ) : null;\n              })}\n              {contentBlock?.orderedList?.map((orderedList) => {\n                return orderedList ? (\n                  <div\n                    className=\"p-2 text-xs\"\n                    dangerouslySetInnerHTML={{ __html: orderedList }}\n                    key={`contentBlock-orderedList-${orderedListIndex++}`}\n                  />\n                ) : null;\n              })}\n              {contentBlock?.unorderedList?.map((unorderedList) => {\n                return unorderedList ? (\n                  <div\n                    className=\"p-2 text-xs\"\n                    dangerouslySetInnerHTML={{ __html: unorderedList }}\n                    key={`contentBlock-orderedList-${unOrderedListIndex++}`}\n                  />\n                ) : null;\n              })}\n            </div>\n          ) : null;\n        })}\n      </div>\n    );\n  }\n  return null;\n};\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","import type { HotelAmenityOption, Maybe } from '@dx-ui/gql-types';\nimport type { HotelType } from '../providers/app-provider/app-provider.types';\nimport getOptimizedImages from './get-optimized-images';\nimport { getLeadRateAvailStatus } from '../components/hotel-card/utils/hotel-lead-rate-utils';\n\nexport type Breadcrumbs = {\n  uri: string;\n  name: string;\n};\n\ntype GetSeoSchemaParams = {\n  breadcrumbs?: Breadcrumbs[];\n  baseUrl: string;\n  language: string;\n  hotels?: HotelType[];\n  amenities?: Pick<HotelAmenityOption, 'name' | 'id'>[];\n};\n\ntype ImageWithRatios = {\n  altText?: Maybe<string>;\n  ratios: { url?: Maybe<string> }[];\n};\ntype ImageWithVariants = {\n  altText?: Maybe<string>;\n  variants: { url?: Maybe<string>; size: 'xs' | 'sm' | 'md' }[];\n};\n\nconst getImageUrl = (image: ImageWithRatios | ImageWithVariants) => {\n  return 'ratios' in image ? image.ratios[0]?.url : getOptimizedImages(image.variants, 'xs');\n};\n\nexport const SEO_IMAGES = 3;\nconst getHotelSeoImages = (\n  hotelImages: HotelType['images'] | null | undefined,\n  imagesWanted: number\n) => {\n  if (!hotelImages) return [];\n\n  const primaryImages = Array.isArray(hotelImages.carousel)\n    ? hotelImages.carousel.slice(0, imagesWanted).map((image) => getImageUrl(image))\n    : [];\n\n  if (primaryImages.length === 0 && hotelImages.master) {\n    return [getImageUrl(hotelImages.master)];\n  }\n  return primaryImages;\n};\n\nexport const SEO_AMENITIES = 1;\nconst getTopThreeAmenities = (\n  hotel: HotelType,\n  amenities: Pick<HotelAmenityOption, 'name' | 'id'>[]\n) => {\n  const topAmenities: { '@type': string; name: string }[] = [];\n  for (const amenity of amenities) {\n    if (hotel.amenityIds.includes(amenity.id)) {\n      topAmenities.push({\n        '@type': 'LocationFeatureSpecification',\n        name: amenity.name,\n      });\n      if (topAmenities.length === SEO_AMENITIES) break;\n    }\n  }\n\n  return topAmenities; // Return the array of top amenities for this hotel\n};\n\nexport const getSeoSchema = ({\n  breadcrumbs,\n  baseUrl,\n  language,\n  hotels,\n  amenities,\n}: GetSeoSchemaParams) => {\n  if (!breadcrumbs || !breadcrumbs.length) return '';\n\n  const breadcrumbItemListElements = breadcrumbs.map((breadcrumb, index) => ({\n    '@type': 'ListItem',\n    position: index + 1,\n    item: {\n      '@id': `${baseUrl}${language}${breadcrumb.uri}`,\n      name: breadcrumb.name,\n    },\n  }));\n  const hotelItemListElements = (hotels ?? [])\n    .slice(0, 20)\n    .filter((hotel) => getLeadRateAvailStatus(hotel.display, hotel.leadRate) === 'AVAILABLE')\n    .map((hotel, index) => {\n      return {\n        '@type': 'ListItem',\n        position: index + 1,\n        item: {\n          '@type': 'Hotel',\n          name: hotel.name,\n          image: getHotelSeoImages(hotel.images, SEO_IMAGES),\n          offers: {\n            '@type': 'Offer',\n            price: hotel.leadRate?.lowest?.rateAmount,\n            priceCurrency: hotel.localization?.currencyCode,\n          },\n          amenityFeature: getTopThreeAmenities(hotel, amenities ?? []),\n          url: hotel.facilityOverview?.homeUrlTemplate,\n        },\n      };\n    });\n\n  const seoSchema = {\n    '@context': 'https://schema.org',\n    '@graph': [\n      {\n        '@type': 'BreadcrumbList',\n        itemListElement: breadcrumbItemListElements,\n      },\n      ...(hotelItemListElements.length > 0\n        ? [\n            {\n              '@type': 'ItemList',\n              itemListElement: hotelItemListElements,\n            },\n          ]\n        : []),\n    ],\n  };\n  return JSON.stringify(seoSchema);\n};\n","import { env } from '../../constants';\nimport { useMetrics, useWrappedRouter } from '../../hooks';\nimport { Accordion } from '@dx-ui/osc-accordion';\n\ntype Interlink = {\n  name: string;\n  uri: string;\n};\n\ntype InterlinksProps = {\n  interlinks?: Interlink[];\n  interlinkTitle?: string;\n  index?: string;\n};\n\nexport const Interlinks = ({ interlinks, interlinkTitle }: InterlinksProps) => {\n  const metrics = useMetrics();\n  const location_interlinks = interlinks || [];\n  const { router } = useWrappedRouter();\n\n  const handleInterlinkMetricsOnClick = (linkItemName?: string) => {\n    if (interlinkTitle) {\n      let data = '';\n      if (interlinkTitle.indexOf('by') > -1)\n        data = interlinkTitle.substring(interlinkTitle.indexOf('by') + 3);\n      if (interlinkTitle.indexOf('near') > -1)\n        data = interlinkTitle.substring(interlinkTitle.indexOf('near') + 5);\n      const formattedLinkItemName = data.split(' ')[0];\n      metrics.trackInterlinksTitleClick(\n        linkItemName && formattedLinkItemName\n          ? `${formattedLinkItemName}:${linkItemName}`\n          : formattedLinkItemName ?? ''\n      );\n    }\n  };\n\n  const interLinkTitle = () => (\n    <h3 className=\"font-sans text-base font-bold text-primary\">\n      <span dangerouslySetInnerHTML={{ __html: interlinkTitle || '' }} />\n    </h3>\n  );\n  return (\n    <div className=\"border-b border-border py-4\" data-testid=\"location-interlinks\">\n      <Accordion\n        className=\"accordion-stacked bg-transparent p-0 text-left font-sans font-bold\"\n        items={[\n          {\n            key: 'location-interlinks',\n            content: (\n              <section>\n                <ol\n                  className=\"grid list-none grid-cols-2 gap-2 pt-4 md:grid-cols-3\"\n                  data-testid=\"interLinkList\"\n                >\n                  {location_interlinks.map((linkItem) => (\n                    <li className=\"inline-block pb-4\" key={linkItem.name}>\n                      <a\n                        className=\"inline-block font-normal text-primary no-underline \"\n                        data-testid={`interLink ${linkItem.name}`}\n                        href={`${env.OHW_BASE_URL}${router.locale}/${linkItem.uri}`}\n                        onClick={() => handleInterlinkMetricsOnClick(linkItem.name)}\n                      >\n                        {linkItem.name}\n                      </a>\n                    </li>\n                  ))}\n                </ol>\n              </section>\n            ),\n            collapsedButtonLabel: interLinkTitle(),\n            expandedButtonLabel: interLinkTitle(),\n          },\n        ]}\n        type=\"multiple\"\n        variant=\"stacked\"\n      />\n    </div>\n  );\n};\n","export * from './interlinks';\n","import { useMemo, useEffect } from 'react';\nimport type {\n  HotelSummaryOptions_GeocodePageQuery,\n  LocationCategory,\n  Maybe,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport { useFeatureToggleConfig } from './use-feature-toggle';\nimport type { PageType } from '../utils';\nimport { getPageType } from '../utils';\nimport { useWrappedRouter } from './use-wrapped-router';\nimport { useAppDispatch } from '../providers/app-provider';\n\ntype PageAttributes = {\n  categoryId?: Maybe<LocationCategory | 'resort'>;\n  categoryName?: string;\n  isCategoryAmenity?: boolean;\n  isGlobalPage?: boolean;\n  isResortPage?: boolean;\n};\nconst defaultDreamPageAttibutes: PageAttributes = {\n  categoryId: undefined,\n  categoryName: '',\n  isCategoryAmenity: false,\n  isGlobalPage: false,\n  isResortPage: false,\n};\ntype DreamAttributesConfig = {\n  id?: Maybe<LocationCategory | 'resort'>;\n  slug?: string;\n  singularDisplay?: string;\n  pluralDisplay?: string;\n  breadcrumbDisplay?: string;\n  amenityIds?: string[];\n  categoryIds?: string[];\n};\n\nexport const useGetDreamPageAttributes = (\n  data: NonNullable<HotelSummaryOptions_GeocodePageQuery['geocodePage']>['location'] | undefined\n) => {\n  const dreamPageAttributesConfig = useFeatureToggleConfig('config-dream-attributes');\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n  const dispatch = useAppDispatch();\n\n  const dreamPageAttributes = useMemo(() => {\n    const pageAttributes: PageAttributes = {\n      ...defaultDreamPageAttibutes,\n      isGlobalPage: !!data?.globalBounds,\n    };\n\n    if (dreamPageAttributesConfig?.enabled) {\n      const category = data?.category;\n      if (category || queryParameters?.activeFiltersState?.amenityFilters?.length) {\n        const dreamAttributes: DreamAttributesConfig[] = Object.values(\n          dreamPageAttributesConfig?.config ?? {}\n        );\n        const categoryOrAmenity = dreamAttributes?.find(\n          (config) =>\n            config?.id === category ||\n            queryParameters?.activeFiltersState?.amenityFilters.includes(config.id ?? '')\n        );\n        pageAttributes.isCategoryAmenity = !!categoryOrAmenity;\n        pageAttributes.isResortPage = category === 'resort';\n        pageAttributes.categoryId = categoryOrAmenity?.id;\n        pageAttributes.categoryName = pageAttributes.isResortPage\n          ? categoryOrAmenity?.pluralDisplay\n          : categoryOrAmenity?.singularDisplay;\n      }\n    }\n    return pageAttributes;\n  }, [\n    data?.category,\n    data?.globalBounds,\n    dreamPageAttributesConfig?.config,\n    dreamPageAttributesConfig?.enabled,\n    queryParameters?.activeFiltersState?.amenityFilters,\n  ]);\n\n  useEffect(() => {\n    //set pageType\n    const pageType: PageType = getPageType(router.asPath, queryParameters);\n    pageType.isGlobal = !!dreamPageAttributes.isGlobalPage;\n    pageType.isResorts = !!dreamPageAttributes.isResortPage;\n    pageType.isCategoryAmenity = !!dreamPageAttributes.isCategoryAmenity;\n    pageType.isBrand = !!data?.brandCode;\n    dispatch({ type: 'SET_PAGE_TYPES', payload: pageType });\n  }, [data, dispatch, dreamPageAttributes, queryParameters, router.asPath]);\n\n  return { pageAttributes: dreamPageAttributes };\n};\n","import type { HotelType } from '../providers/app-provider/app-provider.types';\nimport type { GoogleCoordinate } from '../utils';\nimport { sortHotels } from '../utils';\nimport { useState, useEffect } from 'react';\n\nlet worker: Worker;\n\nif (typeof window !== 'undefined' && typeof Worker !== 'undefined' && import.meta.url) {\n  worker = new Worker(new URL('../utils/hotel-sort-worker.ts', import.meta.url));\n}\nexport const useSortHotels = (\n  sortType: string | null,\n  brandCode: string | undefined,\n  hotels: HotelType[],\n  centerCoordinate: GoogleCoordinate | null\n) => {\n  const [sortedHotels, setSortedHotels] = useState<HotelType[]>([]);\n\n  useEffect(() => {\n    const fetchData = () => {\n      try {\n        if (worker) {\n          worker.postMessage({\n            sortType,\n            brandCode,\n            hotels,\n            centerCoordinate,\n          });\n\n          const handleMessage = (event: { data: HotelType[] }) => {\n            setSortedHotels(event.data);\n          };\n\n          worker.addEventListener('message', handleMessage);\n\n          return () => {\n            worker.removeEventListener('message', handleMessage);\n          };\n        } else {\n          // If Web Worker is not available, call the function directly\n          setSortedHotels(sortHotels(sortType, brandCode, hotels, centerCoordinate));\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error('Error in useSortHotels (Web Worker):', e);\n        // On Error, call the function directly\n        setSortedHotels(sortHotels(sortType, brandCode, hotels, centerCoordinate));\n      }\n    };\n    void fetchData();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [sortType, brandCode, hotels.length, centerCoordinate]);\n  return sortedHotels.length\n    ? sortedHotels\n    : sortHotels(sortType, brandCode, hotels, centerCoordinate);\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport * as React from 'react';\nimport { MetaData } from '../meta-data';\nimport Footer from '../../components/footer';\nimport {\n  env,\n  GOALS,\n  MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n  CHANGE_DEFAULT_SORT_WHEN_USING_POINTS,\n  VARIANTS,\n} from '../../constants';\nimport cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport debounce from 'lodash/debounce';\nimport { Filters, HotelDetails } from '../dynamic-components';\nimport { getSeoSchema } from '../../utils/seo-schema-utils';\nimport { PlacesSearch } from '../places-search';\nimport {\n  useMetrics,\n  useWrappedRouter,\n  useGetDreamPageData,\n  useGetFilteredHotels,\n  useFeatureToggleConfig,\n  useGetMVTSelections,\n  useMapListToggle,\n} from '../../hooks';\nimport { CurrencyConverter } from '../currency-converter/currency-converter';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { useInitializeConductrics } from '../../hooks/use-initialize-conductrics';\nimport { SortByDropDown } from '../sort-by-drop-down';\nimport { SearchHeader } from '../search-header';\nimport { useLocation } from '@dx-ui/framework-location-provider';\nimport useHotelSummaryOptions from '../../hooks/use-hotel-summary-options/use-hotel-summary-options';\nimport { hashHotelSummaryOptionsData } from '../../hooks/use-hotel-summary-options/utils/get-hashed-hotel-summary-options-data-from-cache';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport type { ActiveFiltersState } from '../filters/filter.constants';\nimport { initializeActiveFiltersState } from '../filters/filter-utils';\nimport {\n  getSortType,\n  getSessionState,\n  SORTBY_DROP_DOWN,\n  type SortByDropDownValues,\n} from '../../utils';\nimport { AboutLocationsPage } from '../about-locations/about-locations-page';\nimport { UsePoints } from '../use-points/use-points';\nimport { Interlinks } from '../interlinks';\nimport type { LocationPageInterlink } from '@dx-ui/queries-dx-shop-search-ui';\nimport { sendReward, useConductricsSelection } from '@dx-ui/framework-conductrics';\nimport { ListView } from '../list-view/list-view';\nimport isEqual from 'lodash/isEqual';\nimport { Breadcrumbs } from '../breadcrumbs';\nimport { useGetDreamPageAttributes } from '../../hooks/use-get-dream-page-attributes';\nimport { useSortHotels } from '../../hooks/use-hotel-sort';\nimport { applyFiltersToHotel } from '../../providers/app-provider/app-provider.utils';\nimport { useCoordsFromParams } from '../../hooks/use-coords-from-params';\nimport { useIsClient } from 'usehooks-ts';\nimport { useRef } from 'react';\nimport { CompareHotelsToggle } from '../compare-hotels/compare-toggle';\nimport { CompareBar } from '../compare-hotels/compare-bar';\nimport { useFilterState } from '../../providers/filter-provider';\nimport { HotelSearchResultSummaryPanel } from '../hotel-search-result-summary/hotel-search-result-summary';\nimport { Accordion } from '@dx-ui/osc-accordion';\nimport { useVerticalSpaceMVT } from '../../hooks/use-vertical-space-MVT';\nimport { TaxonomyList } from '@dx-ui/osc-taxonomy-list';\nimport { SuggestedFilterButtons } from '../filters/suggested-filters';\nimport { MapBlock } from '../map/map-block';\nimport { updateMapBounds } from '../map/map.utils';\n\ntype LocationsPageProps = {\n  initialBounds: google.maps.LatLngBoundsLiteral;\n  path: string;\n};\n\nexport const LocationsPage = ({ initialBounds: initBounds, path }: LocationsPageProps) => {\n  const { selectedCtyhocn, selectedCurrency, isListVisible, sortType, shouldUsePoints, pageType } =\n    useAppState();\n  const activeFiltersState = useFilterState();\n  const isClient = useIsClient();\n\n  const dispatch = useAppDispatch();\n\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n  const { shouldUseParamCoords } = useCoordsFromParams();\n\n  const [locationQueryPath, setLocationQueryPath] = React.useState(path);\n  const { t } = useTranslation([\n    'hotel-card',\n    'locations-page',\n    'sort-by-drop-down',\n    'footer',\n    'hotel-counter-text',\n  ]);\n  const metrics = useMetrics();\n  const { guestInfo, isLoading: isAuthLoading, isAuthenticated } = useAuth();\n\n  const {\n    data,\n    locationPath,\n    bounds: initialBounds,\n    isLoading: isLocationPageHSOLoading,\n    initHotelCount,\n    locationMatchName,\n    regionMatchName,\n  } = useGetDreamPageData();\n\n  const { enabled: blobPocToggleEnabled } = useFeatureToggleConfig('NHCSEARCH-4655-blob-poc');\n\n  const { pageAttributes } = useGetDreamPageAttributes(data?.location);\n\n  const { categoryId, categoryName, isGlobalPage, isCategoryAmenity } = pageAttributes;\n  const brandName =\n    data?.hotelSummaryOptions?.brands?.find((brand) => brand.code === data?.location?.brandCode)\n      ?.name || '';\n  const brandCode = data?.location?.brandCode || '';\n  const totalSize = data?.hotelSummaryOptions?._hotels?.totalSize || 0;\n  const initialHashedHotelData = hashHotelSummaryOptionsData(data, {});\n  const [mapBounds, setMapBounds] = React.useState<google.maps.LatLngBoundsLiteral>(initBounds);\n  const [mapCenter, setMapCenter] = React.useState<google.maps.LatLngLiteral | undefined>();\n\n  const isInitialRender = React.useRef(true);\n  const allQuadNodesLoaded = React.useRef(true);\n  const boundsChangeCount = React.useRef(0);\n  const hotelCounterRef = useRef<HTMLDivElement>(null);\n\n  const isCountryOrState = ['country', 'state', 'region'].includes(data?.match?.type || '');\n  const { hashedHotelSummaryOptionsHotelData, isFetching: isHotelSummaryOptionsLoading } =\n    useHotelSummaryOptions({\n      initialHashedHotelSummaryOptionsData: initialHashedHotelData,\n      bounds: mapBounds,\n      brandCode: pageType.isPageBrandFilterEnabled ? brandCode : undefined,\n      language: 'en',\n      address: boundsChangeCount.current < 2 && isCountryOrState ? data?.match?.address : undefined,\n      type: data?.match?.type,\n      isInitialRender,\n      matchName: regionMatchName,\n      blobEnabled: blobPocToggleEnabled,\n      hotelSummaryExtractUrl: data?.location?.hotelSummaryExtractUrl || '',\n    });\n\n  const { coordinate } = useLocation();\n\n  //NHCSEARCH-5020 Change Default Sort When Using Points\n  const { isMVTVariant, isLoaded: isPointSortMVTLoaded } = useGetMVTSelections({\n    agentId: CHANGE_DEFAULT_SORT_WHEN_USING_POINTS?.agentId,\n    isProvisional: shouldUsePoints || queryParameters?.redeemPts,\n  });\n  const isPointsSortMVT = isPointSortMVTLoaded && isMVTVariant?.[VARIANTS.VariantB];\n  const initWithPointsSort = isPointsSortMVT && queryParameters?.redeemPts;\n\n  const sessionState = getSessionState(isClient);\n\n  React.useEffect(() => {\n    if (router.isReady && queryParameters && allQuadNodesLoaded.current) {\n      const locationCategory = isCategoryAmenity ? categoryId : undefined;\n      const newActiveFilterState = initializeActiveFiltersState({\n        category: locationCategory,\n        queryParameters,\n        brandCode,\n        sessionFiltersState: sessionState?.activeFilterState,\n      });\n      newActiveFilterState.showAvailableHotels = false;\n\n      dispatch({\n        type: 'INITIALIZE_APP',\n        payload: {\n          boundingBox: initialBounds || initBounds,\n          initialHashedHotelSummaryOptionsData: initialHashedHotelData,\n          usePoints:\n            sessionState.shouldUsePoints !== undefined\n              ? sessionState.shouldUsePoints\n              : !!queryParameters?.redeemPts,\n          hasConnectingRooms: !!queryParameters?.adjoiningRoomStay,\n          sortType: initWithPointsSort\n            ? SORTBY_DROP_DOWN.POINTS_ASCENDING\n            : getSortType(queryParameters?.sortBy, sessionState?.sortType as SortByDropDownValues),\n          selectedCurrency: sessionState.selectedCurrency\n            ? sessionState.selectedCurrency\n            : queryParameters?.displayCurrency || '',\n          activeFiltersState: newActiveFilterState,\n          brandCode,\n        },\n      });\n      boundsChangeCount.current = 0;\n      sendReward(GOALS.LocationsPageLoad);\n    }\n  }, [router.isReady, allQuadNodesLoaded.current, isCategoryAmenity]);\n\n  // conductrics init\n  useInitializeConductrics({ authLoading: isAuthLoading, guestInfo, isAuthenticated });\n\n  const { isLoaded: isConductricsLoaded } = useConductricsSelection('');\n\n  React.useEffect(() => {\n    if (!isAuthLoading) {\n      metrics.setDreamPageData({\n        pageTitle: data?.location?.meta?.pageTitle || document.title,\n        brandName: brandName || '',\n        brandCode: brandCode || '',\n        categoryName: categoryName || '',\n        location: {\n          type: data?.match?.type,\n          typeName: locationMatchName,\n        },\n        city: data?.match?.address?.city || '',\n        country: data?.match?.address?.country || '',\n        state: data?.match?.address?.state || '',\n        honorsNumber: guestInfo?.hhonors?.hhonorsNumber || '',\n        tier: guestInfo?.hhonors?.summary?.tierName || '',\n        points: guestInfo?.hhonors?.summary?.totalPoints || 0,\n        packages: (guestInfo?.hhonors?.packages as unknown as { packageName: string }[]) || [],\n        currencyCode: selectedCurrency || '',\n        shouldUsePoints,\n        sortBy: sortType || SORTBY_DROP_DOWN.DISTANCE,\n        totalSize,\n      });\n      metrics.setPageData({ page: 'categoryPageView' });\n    }\n  }, [isAuthLoading, categoryName, brandName]);\n\n  React.useEffect(() => {\n    router.events.on('routeChangeStart', () => {\n      allQuadNodesLoaded.current = true;\n      boundsChangeCount.current = 0;\n      hasUserZoomed.current = false;\n    });\n  }, [router.events]);\n\n  React.useEffect(() => {\n    if (locationPath !== locationQueryPath) {\n      setLocationQueryPath(locationPath);\n    }\n    // update with new bounds for shallow routing\n    updateMapBounds({ mapBounds, newBounds: initialBounds, setMapBounds, setMapCenter });\n  }, [locationPath, initialBounds]);\n\n  // For country/state pages, results should be filtered to only that country/state\n  // until the user interacts with the map via pan/zoom (note: resizing the window triggers zoom events)\n  const hasUserZoomed = React.useRef(false);\n  const hasUserPanned = React.useRef(false);\n  const { visibleHotels: preFilteredHotels } = useGetFilteredHotels({\n    address: data?.match?.address,\n    hasUserPanned: hasUserPanned.current,\n    hasUserZoomed: hasUserZoomed.current,\n    isLoading: isHotelSummaryOptionsLoading,\n    matchName: regionMatchName,\n    type: data?.match?.type,\n  });\n\n  const visibleHotels = preFilteredHotels.filter((hotel) => {\n    const currentHotel = hashedHotelSummaryOptionsHotelData?.[hotel];\n    if (currentHotel)\n      return applyFiltersToHotel({\n        amenities: activeFiltersState.amenityFilters,\n        attributes: activeFiltersState.attributeFilters,\n        brandCodes: activeFiltersState.brandFilters,\n        rating: activeFiltersState.ratingsFilter,\n        hotel: currentHotel,\n        showAvailableHotelsOnly: activeFiltersState.showAvailableHotels,\n        hasMPACallResolved: true,\n        useLeadPrice: true,\n        priceRange: activeFiltersState.priceFilter,\n        maxPoints: queryParameters?.maxPoints,\n        shouldUsePoints,\n      });\n    return null;\n  });\n\n  const handleBoundsChange = React.useCallback(\n    debounce((newBounds: google.maps.LatLngBoundsLiteral) => {\n      updateMapBounds({\n        mapBounds,\n        newBounds,\n        setMapBounds,\n        setMapCenter,\n        onBoundsChange: () => {\n          boundsChangeCount.current++;\n        },\n      });\n    }, 300),\n    [mapBounds, setMapBounds]\n  );\n\n  React.useEffect(() => {\n    if (!isHotelSummaryOptionsLoading) {\n      allQuadNodesLoaded.current = true;\n      dispatch({\n        type: 'UPDATE_HOTELS_IN_BOUNDS',\n        payload: {\n          boundingBox: mapBounds,\n          hashedHotelSummaryOptionsHotelData,\n          hasUserZoomed: hasUserZoomed.current,\n        },\n      });\n    }\n  }, [\n    mapBounds,\n    isHotelSummaryOptionsLoading,\n    Object.keys(hashedHotelSummaryOptionsHotelData).length,\n  ]);\n\n  const [srCounter, setSrCounter] = React.useState(1); // set when we want SR to repeat text\n\n  const [hotelCountMessage, setHotelCountMessage] = React.useState(() =>\n    totalSize > MAX_PROPERTIES_PER_LIST_VIEW_PAGE && isListVisible\n      ? t('hotel-counter-text:hotelShowingWithPages', {\n          count: totalSize,\n          pageStart: 1,\n          pageEnd: 20,\n        })\n      : t('hotel-counter-text:hotelShowingWithCount', { count: totalSize })\n  );\n\n  const [srHotelCountMessage, setSrHotelCountMessage] = React.useState(() =>\n    visibleHotels.length\n      ? t('hotel-counter-text:hotelShowingWithCount', { count: totalSize })\n      : t('locations-page:notFoundMessage')\n  );\n\n  const centerCoordinate = React.useMemo(() => {\n    if (data?.location?.globalBounds) {\n      if (mapCenter?.lat !== undefined && mapCenter?.lng !== undefined && !hasUserZoomed.current) {\n        return mapCenter;\n      } else if (coordinate?.latitude !== undefined && coordinate?.longitude !== undefined) {\n        return { lat: coordinate.latitude, lng: coordinate.longitude };\n      }\n    } else if (shouldUseParamCoords) {\n      return {\n        lat: queryParameters?.coords?.latitude || 0,\n        lng: queryParameters?.coords?.longitude || 0,\n      };\n    }\n    return {\n      lat: data?.match?.geometry?.location.latitude || 0,\n      lng: data?.match?.geometry?.location.longitude || 0,\n    };\n  }, [\n    data?.location?.globalBounds,\n    coordinate?.latitude,\n    coordinate?.longitude,\n    data?.match?.geometry?.location.latitude,\n    data?.match?.geometry?.location.longitude,\n    shouldUseParamCoords,\n    mapCenter?.lat,\n    mapCenter?.lng,\n  ]);\n\n  const allHotelsSorted = useSortHotels(\n    sortType,\n    brandCode || '',\n    Object.values(hashedHotelSummaryOptionsHotelData),\n    centerCoordinate\n  );\n\n  const visibleHotelsSet = new Set(visibleHotels);\n  const visibleSortedHotels = allHotelsSorted.filter((hotel) =>\n    visibleHotelsSet.has(hotel.ctyhocn)\n  );\n  const onPageChanged = React.useCallback(\n    (pageIndex: number, pageSize: number) => {\n      const count = !isInitialRender.current ? visibleHotels.length : totalSize;\n      const pageStart = pageIndex * pageSize + 1;\n      const pageEnd = Math.min(count, pageIndex * pageSize + pageSize);\n\n      const message =\n        count > pageSize && isListVisible\n          ? t('hotel-counter-text:hotelShowingWithPages', {\n              count,\n              pageStart,\n              pageEnd,\n            })\n          : t('hotel-counter-text:hotelShowingWithCount', { count });\n      const srMessage = count === 0 ? t('locations-page:notFoundMessage') : message;\n      setHotelCountMessage(message);\n      setSrHotelCountMessage(srMessage);\n    },\n    [isGlobalPage, sortType, isInitialRender.current, totalSize, visibleHotels]\n  );\n\n  React.useEffect(() => {\n    let interval: ReturnType<typeof setInterval>;\n    if (isHotelSummaryOptionsLoading) {\n      interval = setInterval(() => setSrCounter(srCounter + 1), 3000);\n    } else {\n      setSrCounter(0);\n    }\n    return () => clearInterval(interval);\n  }, [isHotelSummaryOptionsLoading, srCounter]);\n\n  // Metadata information\n  const seoSchema = getSeoSchema({\n    breadcrumbs: data?.location?.breadcrumbs,\n    baseUrl: env.OHW_BASE_URL,\n    language: router.locale as string,\n    hotels: visibleSortedHotels,\n    amenities: data?.hotelSummaryOptions?.amenities,\n  });\n\n  const handleFilterChange = React.useCallback(\n    (newActiveFiltersState: Partial<ActiveFiltersState>) => {\n      //if this is a category page re-run location page query using base path w/out category param\n      if (\n        !isInitialRender.current &&\n        data?.location?.category &&\n        !isEqual(newActiveFiltersState, activeFiltersState)\n      ) {\n        //THIS IS A HACK FOR 3398 UNTIL WE IMPLEMENT BRAND TICKET FIX. If basepath is locations do not update the locationQueryPath as this nulls out the entire return of query.\n        if (data?.location.paths?.base !== 'locations/') {\n          setLocationQueryPath(data?.location.paths?.base || '');\n        }\n      }\n\n      dispatch({\n        type: 'APPLY_FILTERS_TO_HOTELS_IN_BOUNDS',\n        payload: {\n          activeFiltersState: newActiveFiltersState,\n          useLeadPrice: true,\n          brandCode,\n        },\n      });\n    },\n    [activeFiltersState, brandCode, data?.location?.category, data?.location.paths?.base, dispatch]\n  );\n\n  const handleFilterReset = () => {\n    //if this is a category page re-run location page query using base path w/out category param\n    if (!isInitialRender.current && data?.location?.category) {\n      //HACK: THIS IS A HACK FOR 3398 UNTIL WE IMPLEMENT BRAND TICKET FIX. If basepath is locations do not update the locationQueryPath as this nulls out the entire return of query.\n      if (data?.location.paths?.base !== 'locations/') {\n        setLocationQueryPath(data?.location.paths?.base || '');\n      }\n    }\n  };\n  const pageInterlinks = data?.location.pageInterlinks;\n\n  const { isDesktopListVisible, isDesktopMapView } = useMapListToggle();\n\n  /* NHCSEARCH-5451 Vertical Space MVT */\n  const {\n    isCurrencyAndSortInAllFiltersModal,\n    isFilterAndSortInAccordion,\n    isSuggestedFiltersInHorizontalScroll,\n    filterAndSortLabel,\n    isVerticalSpaceVar8,\n  } = useVerticalSpaceMVT();\n  const sortAndFiltersContent = (\n    <div\n      className={cx('flex items-center', {\n        'flex-wrap': !isSuggestedFiltersInHorizontalScroll,\n        ' max-md:px-4 md:-mx-3 ': isVerticalSpaceVar8,\n        ' 2xl:px-1': isSuggestedFiltersInHorizontalScroll,\n      })}\n    >\n      {isCurrencyAndSortInAllFiltersModal ? null : (\n        <div\n          className={cx('flex items-end lg:items-center', {\n            'flex-wrap': !isSuggestedFiltersInHorizontalScroll,\n          })}\n        >\n          <SortByDropDown />\n          <CurrencyConverter />\n        </div>\n      )}\n      <UsePoints />\n      <CompareHotelsToggle />\n      <Filters\n        amenities={data?.hotelSummaryOptions?.amenities}\n        amenityCategories={data?.hotelSummaryOptions?.amenityCategories}\n        brands={data?.hotelSummaryOptions?.brands}\n        filteredHotelCount={visibleHotels.length}\n        onFilterChange={handleFilterChange}\n        onResetFilters={() => handleFilterReset()}\n        showSaleFilter={false}\n      />\n      {isSuggestedFiltersInHorizontalScroll ? (\n        <div className=\"ml-1 border-l-2 border-border pl-1\">\n          <SuggestedFilterButtons\n            amenities={data?.hotelSummaryOptions?.amenities}\n            isConductricsLoaded={isConductricsLoaded}\n            isFindingHotels={isHotelSummaryOptionsLoading || isLocationPageHSOLoading}\n            onFilterCriteriaChange={(activeFiltersState: ActiveFiltersState) => {\n              handleFilterChange(activeFiltersState);\n            }}\n            visibleHotels={visibleHotels}\n            matchId={data?.match?.id}\n          />\n        </div>\n      ) : null}\n    </div>\n  );\n  const sortAndFilters = isSuggestedFiltersInHorizontalScroll ? (\n    <TaxonomyList\n      labelledBy={filterAndSortLabel}\n      name={filterAndSortLabel}\n      containerClassname=\"overflow-hidden -my-2\"\n    >\n      {sortAndFiltersContent}\n    </TaxonomyList>\n  ) : (\n    sortAndFiltersContent\n  );\n\n  return (\n    <>\n      <MetaData\n        brandCode={brandCode || 'WW'}\n        description={data?.location?.meta?.description || ''}\n        pageTitle={data?.location?.meta?.pageTitle || ''}\n        path={router.asPath.replace(/^\\/[a-z]{2}\\//i, '/').replace(/\\/$/, '')}\n        seoSchema={seoSchema}\n        isGlobalBounds={!!data?.location?.globalBounds}\n        locationPageMatchType={data?.match?.type}\n      />\n      <SearchHeader brandCode={brandCode} brandName={brandName} isFluid />\n      <main role=\"main\">\n        <div className={cx('container-fluid mb-4', {})}>\n          <div className=\"flex flex-col\">\n            <div className=\"mt-4 flex flex-col\">\n              <div className=\"mt-2 flex-initial md:mt-0\">\n                <Breadcrumbs breadcrumbs={data?.location?.breadcrumbs || []} />\n              </div>\n            </div>\n\n            <div className=\"my-2 mt-4 border-t border-border-alt py-2 md:mb-0\">\n              <PlacesSearch\n                brandCode={brandCode || ''}\n                ctaText={t('locations-page:update')}\n                hasShallowRoutingEnabled={true}\n                matchId={data?.match?.id}\n              />\n            </div>\n          </div>\n          <div className=\"mb-4 border-b-4 border-hilton-alt pb-4\">\n            {/* NHCSEARCH-5451 Vertical Space MVT */}\n            {isFilterAndSortInAccordion ? (\n              <Accordion\n                className=\"accordion-single hover:text-primary-alt\"\n                items={[\n                  {\n                    collapsedButtonLabel: filterAndSortLabel,\n                    expandedButtonLabel: filterAndSortLabel,\n                    expandedClassName: 'mb-3 lg:mb-4',\n                    key: filterAndSortLabel,\n                    content: sortAndFilters,\n                  },\n                ]}\n                type=\"single\"\n              />\n            ) : (\n              sortAndFilters\n            )}\n          </div>\n          <div\n            className={cx('relative grid grid-cols-1', {\n              'md:grid-cols-[max-content_1fr] md:gap-4': isDesktopListVisible,\n              'w-full': isDesktopMapView,\n            })}\n          >\n            <div\n              style={{ minHeight: '100vh' }}\n              className={cx({\n                'z-1 bg-bg relative h-auto max-md:w-full md:static md:max-w-[440px] lg:w-[694px] lg:max-w-[694px] xl:w-[888px] xl:max-w-[888px]':\n                  isListVisible,\n                'max-sm:z-0 hidden': !isListVisible,\n              })}\n            >\n              <HotelSearchResultSummaryPanel\n                amenities={data?.hotelSummaryOptions?.amenities}\n                customCounterMessage={hotelCountMessage}\n                customCounterSRMessage={srHotelCountMessage}\n                hotelCount={visibleSortedHotels.length}\n                isFindingHotels={isHotelSummaryOptionsLoading || isLocationPageHSOLoading}\n                isConductricsLoaded={isConductricsLoaded}\n                matchId={data?.match?.id}\n                onFilterChange={(activeFiltersState: ActiveFiltersState) =>\n                  handleFilterChange(activeFiltersState)\n                }\n                pageHeading1Title={data?.location?.title}\n                visibleHotels={visibleHotels}\n                showingHotelDivRef={hotelCounterRef}\n              />\n\n              <div className=\"md:sticky md:top-0\">\n                <ListView\n                  brandCode={brandCode || ''}\n                  brandName={brandName}\n                  centerCoordinate={centerCoordinate}\n                  isConductricsLoaded={true}\n                  onPageChanged={onPageChanged}\n                  sortedHotels={visibleSortedHotels}\n                  isHSODataLoading={isHotelSummaryOptionsLoading || isLocationPageHSOLoading}\n                  initHotelCount={initHotelCount ?? 0}\n                />\n                <AboutLocationsPage\n                  about={data?.location?.about}\n                  aboutClassName=\"px-0 py-3\"\n                  contentBlockClassName=\"py-1\"\n                  descriptionClassName=\"px-0 pb-1 text-xs\"\n                />\n                {pageInterlinks &&\n                  pageInterlinks?.length > 0 &&\n                  pageInterlinks?.map(\n                    (linkItem: LocationPageInterlink, index: React.Key | null | undefined) => (\n                      <Interlinks\n                        index={`${index}`}\n                        interlinkTitle={linkItem?.title || ''}\n                        interlinks={linkItem?.links}\n                        key={linkItem?.title || `title-${linkItem.links[0]?.name ?? index}`}\n                      />\n                    )\n                  )}\n                <div>\n                  <p className=\"p-8 text-xs\" data-testid=\"rateLegalDisclosure\">\n                    {shouldUsePoints\n                      ? t('locations-page:pointsLegalDisclaimer')\n                      : t('locations-page:legalDisclaimer')}\n                  </p>\n                </div>\n              </div>\n            </div>\n\n            <MapBlock\n              showSpinner={isHotelSummaryOptionsLoading}\n              visibleFilteredInBoundHotels={visibleHotels}\n              handleBoundsChange={handleBoundsChange}\n              hasUserPanned={hasUserPanned}\n              hasUserZoomed={hasUserZoomed}\n              initialBounds={initialBounds || initBounds}\n              filterChange={handleFilterChange}\n              isFindingHotels={isHotelSummaryOptionsLoading}\n              hotelCounterRef={hotelCounterRef}\n              pageHeading1Title={data?.location?.title}\n              centerCoordinate={centerCoordinate}\n              amenities={data?.hotelSummaryOptions?.amenities}\n              matchId={data?.match?.id}\n              counterMessage={{\n                customCounterMessage: hotelCountMessage,\n                customCounterSRMessage: srHotelCountMessage,\n              }}\n            />\n          </div>\n        </div>\n      </main>\n      <div className={cx({ 'mt-10 md:mt-0': !isListVisible })}>\n        <Footer isFluid />\n      </div>\n      <CompareBar\n        centerCoordinate={centerCoordinate}\n        onStopCompare={() => hotelCounterRef?.current?.focus()}\n      />\n      {/* Hotel details Panel */}\n      {!!selectedCtyhocn ? <HotelDetails /> : null}\n    </>\n  );\n};\n","export * from './locations-page';\n","import { LocationsPage } from '../../../components/locations-page';\nimport type { GetServerSidePropsContext } from 'next';\nimport { TransactionViewWrapper } from '../../../components/view-transactions/transactions-view-wrapper';\nimport { getServerSideClients, getServerSideSafeLanguage } from '@dx-ui/framework-react-query';\nimport { AppProvider } from '../../../providers/app-provider';\nimport {\n  COMMON_NAMESPACES,\n  FEATURE_TOGGLES,\n  LOCATIONS_NAMESPACES,\n  REACT_QUERY_CONFIG,\n  SEARCH_NAMESPACES,\n} from '../../../constants';\nimport {\n  serverSideAllRegionsQuery,\n  serverSideFeatureToggles_FeatureConfigsQuery,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport type { HotelSummaryOptions_GeocodePageQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getUrlParamsString } from '../../../utils';\nimport {\n  getCustomHeaders,\n  serverSideGeocodePageHotelSummaryData,\n  serverSideProps,\n} from '../../../utils/serverSideProps';\nimport { FilterProvider } from '../../../providers/filter-provider';\n\ntype LocationsPageProps = {\n  pageData: HotelSummaryOptions_GeocodePageQuery['geocodePage'];\n  path: string;\n  isOneLink: boolean;\n};\n\nexport default function Locations({ pageData, path, isOneLink }: LocationsPageProps) {\n  // If bounds are available on hotelSummaryOptions (the expanded bounding box), then use it. Othwise use standard bounds.\n  const bounds = pageData?.hotelSummaryOptions?.bounds || pageData?.match?.geometry?.bounds;\n\n  const initialBounds = {\n    south: bounds?.southwest.latitude || 80,\n    west: bounds?.southwest.longitude || -160,\n    north: bounds?.northeast.latitude || 80,\n    east: bounds?.northeast.longitude || 160,\n  };\n\n  return (\n    <FilterProvider>\n      <AppProvider\n        initialHotelSummaryOptionsData={pageData as HotelSummaryOptions_GeocodePageQuery}\n        isOneLink={isOneLink}\n      >\n        <LocationsPage initialBounds={initialBounds} path={path} />\n        <TransactionViewWrapper />\n      </AppProvider>\n    </FilterProvider>\n  );\n}\n\nexport const getServerSideProps = async (context: GetServerSidePropsContext) => {\n  const { resolvedUrl, res, params } = context;\n  const locale = getServerSideSafeLanguage(context);\n  // For dynamic routing all the path slugs will be in a single array on ctx.query called slug. We joined them together with / in order to pass to core+\n  const locationPath = (params?.slug as string[])?.join('/') || '';\n  const path = ['locations', locationPath].join('/').replace(/\\/+/g, '/');\n\n  const customHeaders = getCustomHeaders(context);\n  const { authClient, queryClient } = getServerSideClients({\n    ...REACT_QUERY_CONFIG,\n    customHeaders,\n    response: res,\n    language: locale,\n  });\n  const serverSideRulesAndToggles = await serverSideFeatureToggles_FeatureConfigsQuery(\n    queryClient,\n    {\n      names: FEATURE_TOGGLES,\n    }\n  ).catch((e) => {\n    console.log(`Error in serverSideFeatureToggles_FeatureConfigsQuery: ${e}`); // eslint-disable-line no-console\n    return null;\n  });\n\n  if (!serverSideRulesAndToggles) {\n    return { notFound: true };\n  }\n  const hotelSummaryData = await serverSideGeocodePageHotelSummaryData({\n    path,\n    queryClient,\n    locale,\n    url: resolvedUrl,\n  }).catch((e) => {\n    console.log(`Error in serverSideGeocodePageHotelSummaryData: ${e}`); // eslint-disable-line no-console\n    return null;\n  });\n\n  if (!hotelSummaryData) {\n    return { notFound: true };\n  }\n\n  const pageData = hotelSummaryData?.geocodePage;\n\n  // perform redirect if match is null and query is complete using canconical url\n  if (!pageData?.match) {\n    //first check if a valid canonical uri is returned. If not then something went wrong. 404\n    if (!pageData?.location?.uri) {\n      return { notFound: true };\n    }\n    const urlParams = getUrlParamsString(locale, resolvedUrl);\n    return {\n      redirect: {\n        destination: `/${locale}/${pageData?.location?.uri}${urlParams}`,\n        permanent: true,\n      },\n    };\n  }\n\n  return serverSideProps({\n    authClient,\n    context,\n    queryClient,\n    namespaces: [...COMMON_NAMESPACES, ...LOCATIONS_NAMESPACES, ...SEARCH_NAMESPACES],\n    pageProps: {\n      customHeaders,\n      pageData,\n      path,\n    },\n    getServerSideQueries({ queryClient }) {\n      return [\n        serverSideAllRegionsQuery(queryClient, { language: 'en' }).catch((e) => {\n          console.log(`Error in serverSideAllRegionsQuery: ${e}`); // eslint-disable-line no-console\n          return null;\n        }),\n      ];\n    },\n  });\n};\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"about-locations-page_container__GUw4u\"};","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n"],"names":["Breadcrumbs","breadcrumbs","rest","t","useTranslation","length","nav","aria-label","data-testid","ol","className","map","breadcrumb","idx","isLastBreadcrumb","li","a","aria-current","href","uri","name","span","aria-hidden","router","useWrappedRouter","breadCrumbs","bc","locale","OSCBreadCrumbs","AboutLocationsPage","about","aboutClassName","contentBlockClassName","descriptionClassName","titleClassName","descIndex","orderedListIndex","unOrderedListIndex","contentBlocks","div","cx","styles","title","contentBlock","dangerouslySetInnerHTML","__html","descriptions","description","orderedList","unorderedList","getImageUrl","image","ratios","url","getOptimizedImages","variants","getHotelSeoImages","hotelImages","imagesWanted","primaryImages","Array","isArray","carousel","slice","master","getTopThreeAmenities","hotel","amenities","topAmenities","amenity","amenityIds","includes","id","push","SEO_AMENITIES","getSeoSchema","baseUrl","language","hotels","breadcrumbItemListElements","index","position","item","hotelItemListElements","filter","getLeadRateAvailStatus","display","leadRate","images","SEO_IMAGES","offers","price","lowest","rateAmount","priceCurrency","localization","currencyCode","amenityFeature","facilityOverview","homeUrlTemplate","JSON","stringify","itemListElement","worker","Interlinks","interlinks","interlinkTitle","metrics","useMetrics","handleInterlinkMetricsOnClick","data","indexOf","substring","formattedLinkItemName","split","trackInterlinksTitleClick","linkItemName","interLinkTitle","h3","Accordion","items","key","content","section","location_interlinks","linkItem","env","OHW_BASE_URL","onClick","collapsedButtonLabel","expandedButtonLabel","type","variant","defaultDreamPageAttibutes","categoryId","undefined","categoryName","isCategoryAmenity","isGlobalPage","isResortPage","useGetDreamPageAttributes","dreamPageAttributesConfig","useFeatureToggleConfig","safeQueryParams","queryParameters","dispatch","useAppDispatch","dreamPageAttributes","useMemo","pageAttributes","globalBounds","enabled","category","activeFiltersState","amenityFilters","dreamAttributes","Object","values","config","categoryOrAmenity","find","pluralDisplay","singularDisplay","useEffect","pageType","getPageType","asPath","isGlobal","isResorts","isBrand","brandCode","payload","Worker","URL","useSortHotels","sortType","centerCoordinate","sortedHotels","setSortedHotels","useState","fetchData","postMessage","handleMessage","event","addEventListener","removeEventListener","sortHotels","e","console","error","LocationsPage","initialBounds","initBounds","path","selectedCtyhocn","selectedCurrency","isListVisible","shouldUsePoints","useAppState","useFilterState","isClient","useIsClient","shouldUseParamCoords","useCoordsFromParams","locationQueryPath","setLocationQueryPath","React","guestInfo","isLoading","isAuthLoading","isAuthenticated","useAuth","locationPath","bounds","isLocationPageHSOLoading","initHotelCount","locationMatchName","regionMatchName","useGetDreamPageData","blobPocToggleEnabled","location","brandName","hotelSummaryOptions","brands","brand","code","totalSize","_hotels","initialHashedHotelData","hashHotelSummaryOptionsData","mapBounds","setMapBounds","mapCenter","setMapCenter","isInitialRender","allQuadNodesLoaded","boundsChangeCount","hotelCounterRef","useRef","isCountryOrState","match","hashedHotelSummaryOptionsHotelData","isFetching","isHotelSummaryOptionsLoading","useHotelSummaryOptions","initialHashedHotelSummaryOptionsData","isPageBrandFilterEnabled","address","current","matchName","blobEnabled","hotelSummaryExtractUrl","coordinate","useLocation","isMVTVariant","isLoaded","isPointSortMVTLoaded","useGetMVTSelections","agentId","CHANGE_DEFAULT_SORT_WHEN_USING_POINTS","isProvisional","redeemPts","initWithPointsSort","VARIANTS","VariantB","sessionState","getSessionState","isReady","newActiveFilterState","initializeActiveFiltersState","locationCategory","sessionFiltersState","activeFilterState","showAvailableHotels","boundingBox","usePoints","hasConnectingRooms","adjoiningRoomStay","SORTBY_DROP_DOWN","POINTS_ASCENDING","getSortType","sortBy","displayCurrency","sendReward","GOALS","LocationsPageLoad","useInitializeConductrics","authLoading","isConductricsLoaded","useConductricsSelection","setDreamPageData","pageTitle","meta","document","typeName","city","country","state","honorsNumber","hhonors","hhonorsNumber","tier","summary","tierName","points","totalPoints","packages","DISTANCE","setPageData","page","events","on","hasUserZoomed","updateMapBounds","newBounds","hasUserPanned","visibleHotels","preFilteredHotels","useGetFilteredHotels","currentHotel","applyFiltersToHotel","attributes","attributeFilters","brandCodes","brandFilters","rating","ratingsFilter","showAvailableHotelsOnly","hasMPACallResolved","useLeadPrice","priceRange","priceFilter","maxPoints","handleBoundsChange","debounce","onBoundsChange","keys","srCounter","setSrCounter","setHotelCountMessage","MAX_PROPERTIES_PER_LIST_VIEW_PAGE","count","pageStart","pageEnd","srHotelCountMessage","setSrHotelCountMessage","lat","lng","latitude","longitude","coords","geometry","allHotelsSorted","visibleHotelsSet","Set","visibleSortedHotels","has","ctyhocn","onPageChanged","pageIndex","pageSize","Math","min","message","srMessage","interval","setInterval","clearInterval","seoSchema","handleFilterChange","newActiveFiltersState","isEqual","paths","base","handleFilterReset","pageInterlinks","isDesktopListVisible","isDesktopMapView","useMapListToggle","isCurrencyAndSortInAllFiltersModal","isFilterAndSortInAccordion","isSuggestedFiltersInHorizontalScroll","filterAndSortLabel","isVerticalSpaceVar8","useVerticalSpaceMVT","sortAndFiltersContent","SortByDropDown","CurrencyConverter","UsePoints","CompareHotelsToggle","Filters","amenityCategories","filteredHotelCount","onFilterChange","onResetFilters","showSaleFilter","SuggestedFilterButtons","isFindingHotels","onFilterCriteriaChange","matchId","sortAndFilters","TaxonomyList","labelledBy","containerClassname","MetaData","replace","isGlobalBounds","locationPageMatchType","SearchHeader","isFluid","main","role","PlacesSearch","ctaText","hasShallowRoutingEnabled","expandedClassName","style","minHeight","HotelSearchResultSummaryPanel","customCounterMessage","hotelCountMessage","customCounterSRMessage","hotelCount","pageHeading1Title","showingHotelDivRef","ListView","isHSODataLoading","links","p","MapBlock","showSpinner","visibleFilteredInBoundHotels","filterChange","counterMessage","Footer","CompareBar","onStopCompare","focus","HotelDetails","Locations","pageData","isOneLink","south","southwest","west","north","northeast","east","FilterProvider","AppProvider","initialHotelSummaryOptionsData","TransactionViewWrapper"],"sourceRoot":"","ignoreList":[6,15,16,18,19]}